//引用express框架
const express = require('express');
//引用route路由
const getTask = express.Router();
//引用数据库操作逻辑
var Step = require('../model/step')
var Task = require('../model/task')
var Task_stepBind = require('../model/task_stepBind')
var TaskPush = require('../model/taskPush')
var TaskJoin = require('../model/TaskJoin')
// 返回前端信息

getTask.get('/', (req, res) => {
    let data = {
        status: 200,
        tips: 'success',
        task: ''
    }
    let respon = res
    // 获取当前请求页
    let nowPage = req.query.nowPage
    // 获取要请求的数据量
    let nextNum = req.query.nextNum
    // 获取要任务类型
    let type = req.query.type
    // 获取任务的发布地点
    let city = req.query.city
    // 获取请求时间
    let time = req.query.time
    // 获取请求内容
    let context = req.query.context
    // 查询赏金任务
    if (type == 1) {
        Task.find({
            // 要求赏金金额大于0的
            taskReturn: { $gt: 0 },
            // 要求任务创建时间小于等于请求时间的
            taskCreatTime: { $lte: time }
        }, function (err, doc) {
            // 获取数据库记录长度
            let totalPage = doc.length
            // 函数会回传大于等于所给数字的最小整数(判断数据总共可以分为多少页)
            totalPage = Math.ceil(totalPage / nextNum)
            // 若请求页数已经大于分页数
            if (nowPage > totalPage) {
                data.tips = '数据已加载完'
                respon.status(200).json(data)
                return
            }
            // 管道查询
            Task.aggregate([
                {
                    // 级联查询
                    $lookup: {
                        // 查询“TaskJoin”表(已加入人数)
                        from: "TaskJoin",
                        localField: '_id',
                        foreignField: 'taskId',
                        // 作为字段count
                        as: 'count'
                    },
                }, {
                    // 条件查询
                    $match: {
                        taskReturn: {
                            $gt: 0
                        },
                        city: {
                            $regex: city
                        },
                        taskCreatTime: {
                            $lte: time
                        },
                        // 模糊查询(搜索情况)
                        taskName: { $regex: context }
                    },
                }
            ]).sort({ 'taskCreatTime': -1 }).skip((nowPage - 1) * parseInt(nextNum)).limit(parseInt(nextNum)).exec(function (err, doc) {
                if (err) {
                    // 错误提示
                    data.status = '600'
                    respon.status(200).json(data)
                    return
                }
                // 返回查询结果
                data.task = doc
                respon.status(200).json(data)
            })
        })
    }
    // 查询公共任务
    else {
        Task.find({
            taskReturn: { $lte: 0 },
            taskCreatTime: { $lte: time }
        }, function (err, doc) {
            let totalPage = doc.length
            totalPage = Math.ceil(totalPage / nextNum)
            if (nowPage > totalPage) {
                data.tips = '数据已加载完'
                respon.status(200).json(data)
                return
            }
            Task.aggregate([
                {
                    $lookup: {
                        from: "TaskJoin",
                        localField: '_id',
                        foreignField: 'taskId',
                        as: 'count'
                    },
                }, {
                    $match: {
                        taskReturn: {
                            $lte: 0
                        },
                        city: {
                            $regex: city
                        },
                        taskCreatTime: {
                            $lte: time
                        },
                        taskName: { $regex: context }
                    }
                }
            ]).sort({ 'taskCreatTime': -1 }).skip((nowPage - 1) * parseInt(nextNum)).limit(parseInt(nextNum)).exec(function (err, doc) {
                if (err) {
                    data.status = '600'
                    respon.status(200).json(data)
                    return
                }
                data.task = doc
                respon.status(200).json(data)
            })
        })
    }
})

//将路由对象做为模块成员进行导出
module.exports = getTask;